package com.example.stock.service;

import com.example.stock.excel.*;
import com.example.stock.util.StatisticDataUtil;
import lombok.extern.log4j.Log4j2;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

import java.util.*;
import java.util.stream.Collectors;

@Log4j2
@Service
public class StatisticService {

    /**
     * 获取月线分位点数据的缓存
     * 该方法不需要参数，通过缓存获取月线分位点数据的Map映射。如果缓存中不存在该数据，则会调用相应的方法进行数据组装并存入缓存中。
     *
     * @return 返回一个Map对象，其中键是日期字符串，值是对应日期的月线分位点数据列表。
     */
    public Map<String, List<MonthLpUp>> getMonthLpUp() {
        // 从工具类获取月线分位点数据列表
        return StatisticDataUtil.getMonthLpUp().stream()
                .collect(Collectors.groupingBy(MonthLpUp::getDate));
    }

    /**
     * 获取月线分位点数据的缓存
     *
     * @return 月线分位点数据的Map映射
     */
    public Map<String, List<MonthLpDown>> getMonthLpDown() {
        return StatisticDataUtil.getMonthLpDown().stream()
                .collect(Collectors.groupingBy(MonthLpDown::getDate));
    }

    public Map<String, List<WeekLpUp>> getWeekLpUp() {
        return StatisticDataUtil.getWeekLpUpData().stream()
                .collect(Collectors.groupingBy(WeekLpUp::getDate));
    }

    public Map<String, List<WeekLpNewHigh>> getWeekLpNewHigh() {
        return StatisticDataUtil.getWeekLpNewHighs().stream()
                .collect(Collectors.groupingBy(WeekLpNewHigh::getDate));
    }

    public Map<String, List<MonthLpNewHigh>> getMonthLpNewHigh() {
        return StatisticDataUtil.getMonthLpNewHigh().stream()
                .collect(Collectors.groupingBy(MonthLpNewHigh::getDate));
    }
}
